﻿// Copyright (c) 2012 Mokah Nnamezie & Andrew Cooper
// Neo4Net graph database - http://neo4net.codeplex.com
//
// This file is part of Neo4Net - a .Net port of the Neo4j graph database
//
// Neo4Net is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

namespace Neo4Net.Kernel
{
    using System;
    using System.Collections.Generic;
    using Neo4Net.GraphDb;
    using Neo4Net.Kernel.Impl.Core;
    using Neo4Net.Kernel.Impl.Persistence;
    using Neo4Net.Kernel.Impl.Transaction;
    using Neo4Net.Kernel.Impl.Util;
    using Neo4Net.Kernel.Info;
    using Neo4Net.Compat.Transaction;

    /// This API can be used to get access to services.
    ///
    /// TODO: The methods exposing internal services directly should go away. It indicates lack of abstractions somewhere. DO NOT ADD MORE USAGE OF THESE!
    public interface IGraphDatabaseAPI : IGraphDatabaseService
    {
        [Obsolete]
        NodeManager NodeManager { get; }

        [Obsolete]
        LockReleaser LockReleaser { get; }

        [Obsolete]
        LockManager LockManager { get; }

        [Obsolete]
        XaDataSourceManager XaDataSourceManager { get; }

        [Obsolete]
        ITransactionManager TxManager { get; }

        [Obsolete]
        DiagnosticsManager DiagnosticsManager { get; }

        [Obsolete]
        StringLogger MessageLog { get; }

        [Obsolete]
        RelationshipTypeHolder RelationshipTypeHolder { get; }

        [Obsolete]
        IIdGeneratorFactory IdGeneratorFactory { get; }

        [Obsolete]
        string StoreDir { get; }

        [Obsolete]
        KernelData KernelData { get; }

        [Obsolete]
        T SingleManagementBean<T>(T type);

        [Obsolete]
        ITransactionBuilder Tx { get; }

        [Obsolete]
        IPersistenceSource PersistenceSource { get; }

        [Obsolete]
        ICollection<T> ManagementBeans<T>(T type);

        [Obsolete]
        KernelPanicEventGenerator KernelPanicGenerator { get; }

        Guard.Guard Guard { get; }
    }
}
